package org.batatasframework.support.database.metadatas;

import java.util.Collection;

import org.batatasframework.support.database.TableDescriptor;



/**
 * <pre>
 * 可以参考或直接使用{@link org.hibernate.tool.hbm2ddl.TableMetadata}
 * 
 * 这个元数据表也可能是一个临时表，所以这里应该使用接口
 * </pre>
 * 
 * <pre>
 * 这一层是直接对应数据库定义的元数据
 * 
 * 目前的子类共有三类：
 * 普通表
 * 视图
 * 指标表
 * </pre>
 * 
 * <pre>
 * Specification 规范
 * Identify  识别,确定,标识,找出,鉴别,辨别,辨认 
 * Descriptor 描述符
 * Reference 引用
 * </pre>
 * 
 *
 * @author jackson
 *
 */
public interface TableMetadata extends TableDescriptor, TableMetadataSourcable{
	
	/** 一个自然表，一定需要定义一个主键 */
	String getPrimaryKey();
	
	/** 取一个字段的定义，如果字段不存在，则抛出不存在的异常！ */
	FieldMetadata get(String fieldName);
	
	FieldMetadata getOrNull(String key);

	Collection<? extends FieldMetadata> getFieldMetadatas();
	
}
